package com.charles.ch_19;
/*
* 泛型方法：可以为静态方法定义泛型类型。
* */
//    * 为了定义一个类为泛型类型，需要将泛型类型放在类名之后，例如：GenericStack<E>l

public class GenericMethodDemo {
    public static void main(String[] args) {
        Integer[] integers = {1,2,3,4,5};
        String[] strings = {"London","Peking","NanJing","XuChang","ZhengZhou"};
        GenericMethodDemo.print(integers);
        GenericMethodDemo.print(strings);
    }

    /*
    * 泛型方法
    * 为了声明泛型方法，将泛型类型<E> 置于方法头中关键字static之后，例如：pubulic static <E> void print(E[] list)
    * */
    public static <E> void print(E[] list){
        for (int i = 0; i < list.length; i++) {
            System.out.print(list[i] + " ");
            System.out.println();
        }
    }
}

/*
* 受限泛型类型：
* 可以将泛型指定为另外一种类型的子类型。这样的泛型类型称为受限的。
* */
class BoundedTypeDemo {
    public static void main(String[] args) {

    }
    /*
    * <E extends GenericMethodDemo> 就是一个受限的泛型类型，将E指定为GenericMethodDemo的泛型子类型。
    * */
    public static <E extends GenericMethodDemo> boolean equalArea(E object1, E object2){
        return object1.getClass() == object2.getClass();
    }

}

